package com.koron.css2.clientCenter.mapper;

import com.koron.css2.clientCenter.bean.AccountInfoBean;
import com.koron.css2.clientCenter.bean.UserInfoMergeDetail;
import com.koron.css2.clientCenter.queryBean.AccountInfoQueryBean;
import com.koron.css2.clientCenter.vo.AccountBalanceVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 账户信息,tableType:1为正式表，2为临时表，3为历史表
 *
 * @author 甄玉晴
 *
 */
public interface AccountInfoMapper {

	/**
	 * 根据账户户编号统计记录数
	 * @param accountNo 账户户编号
	 * @return
	 */
	int countByAccountNo(@Param("accountNo") String accountNo);

	/**
	 * 批量修改账户信息状态字段值
	 * @param idList 主键ID集合
	 * @param status 状态值
	 * @param tableType
	 * @return
	 */
	int batchUpdateStatus(@Param("idList")  List<String> idList, @Param("status") int status, @Param("tableType") int tableType);
	/**
	 * 根据客户编号查询账户列表
	 */
	List<AccountInfoBean> getAccountInfoByCtmNo(@Param("ctmNo") String ctmNo, @Param("tableType") int tableType);
	/**
	 * 根据Id查询账户信息
	 * @param id
	 * @return
	 */
	public AccountInfoBean getAccountInfoById(@Param("id")String id,@Param("tableType")int tableType);

	/**
	 * 根据Id查询账户信息
	 * @param idList
	 * @return
	 */
	public List<AccountInfoBean> getListByIdList(@Param("idList") List<String> idList,@Param("tableType")int tableType);

	/**
	 * 获取到账户表的余额信息
	 * @param id
	 * @param tableType
	 * @return
	 */
	double getAccountBalance(@Param("id") String id, @Param("tableType") int tableType);

	/**
	 * 根据编号获取账户信息
	 *
	 * @param accountNo
	 * @return
	 */
	AccountInfoBean getAccountInfoByCode(@Param("accountNo") String accountNo,@Param("tableType")int tableType);
	/**
	 * 添加账户信息
	 * @param bean
	 * @return
	 */
	public Integer accountInfoAdd(@Param("bean") AccountInfoBean bean,@Param("tableType")int tableType);
	/**
	 * 添加账户信息List
	 * @param bean
	 * @return
	 */
	public Integer accountInfoAddList(@Param("list") List<AccountInfoBean> list,@Param("tableType")int tableType);
	/**
	 * 修改账户信息
	 * @param bean
	 * @return
	 */
	public Integer accountInfoUpdate(@Param("bean") AccountInfoBean bean,@Param("tableType")int tableType);
	/**
	 * 修改账户信息
	 * @param bean
	 * @return
	 */
	public Integer accountInfoUpdateByNo(@Param("bean") AccountInfoBean bean,@Param("tableType")int tableType);
	/**
	 * 删除账户信息
	 * @param id
	 * @return
	 */
	public Integer accountInfoDelete(@Param("id")String id,@Param("tableType")int tableType);
	/**
	 * 更新账户客户信息
	 * @param oldCtmNo
	 * @param newCtmNo
	 * @return
	 */
	public Integer accountInfoCtmNoUpdate(@Param("id")String id,@Param("oldCtmNo")String oldCtmNo,@Param("newCtmNo")String newCtmNo);
	/**
	 * 过户修改账户信息
	 * @param bean
	 * @return
	 */
	public Integer accountInfoUpdateForTransfer(@Param("bean") AccountInfoBean bean,@Param("tableType")int tableType);
	/**
	 * 获取账户余额信息
	 * @param fuzzyQuery
	 * @return
	 */
	public AccountBalanceVO getAccountBalanceInfo(@Param("fuzzyQuery") String fuzzyQuery);
	/**
	 * 获取账户密码
	 * @param accountNo
	 * @param accountBalance
	 * @return
	 */
	public Integer updateAccountBalance(@Param("accountNo")String accountNo,
										@Param("accountBalance") Double accountBalance,
										@Param("tableType") int tableType);

	/**
	 * 通过合同号查询账号信息
	 * @param contractNo
	 * @return
	 */
	public AccountInfoBean getAccountByContractNo(String contractNo);

	/**
	 * 通过银行编号
	 * @param bankAccount
	 * @return
	 */
	public AccountInfoBean getAccountByBankNo(String bankAccount);

	List<AccountInfoBean> getAccountsByAccountNos(@Param("accountNos") List<String> accountNos);

	List<AccountInfoBean> getAccountsInfos(AccountInfoBean accountInfoBean);

	/**
	 * 修改账户银行信息
	 * @param accountInfo
	 * @return
	 */
	int updateBankAcount(AccountInfoBean accountInfo);

	String getMergeInvoicingByUserNo(String str);

	List<String> getAccountNoListByCtmNoList(@Param("ctmNoList") List<String> ctmNoList);

	void batchUpdateCtmNoByAccountNo(@Param("userInfoMergeDetailList") List<UserInfoMergeDetail> userInfoMergeDetailList);

	void batchDelete(@Param("query") AccountInfoQueryBean accountInfoQueryBean, @Param("tableType")int tableType);

	List<AccountInfoBean> getListByAccountNoList(@Param("accountNoList") List<String> accountNoList, @Param("tableType")int tableType);
}
